'use strict';

const think = require('thinkjs').think;
const moment = require('moment');

class Order extends think.Model {
    /**
     * 订单完成支付
     * @param {String} orderNo 订单编号
     * @param {Object} postData 支付信息
     * @param {String} payType 支付方式
     */
    async payComplete(orderNo, postData, payType) {
        let payTime; // 支付时间
        const orderInfo = await this.model('order').where({
            order_no: orderNo,
        }).find(); // 订单信息
        const payInfo = await think.extModel('pay').where({
            type: payType,
        }).find();
        // 未找到订单 记录日志
        if (!orderInfo.id) {
            think.logger.info(`${payInfo.title}支付成功但未找到订单${orderNo} 支付通知信息：`, postData);
            return false;
        }
        // 修改订单结果
        if (orderInfo.pay_status === 0) {
            // 支付时间
            if (payInfo.type === 'alipay') {
                payTime = moment(postData.gmt_payment).format('x');
            }
            const updateData = {
                pay_status: 1,
                pay_time: payTime,
            };
            if (orderInfo.type === 1) {
                await this.model('member').where({ id: orderInfo.user_id }).increment('amount', orderInfo.order_amount);
                // 充值成功后插入日志
                const log = {
                    admin_id: 0,
                    user_id: orderInfo.user_id,
                    type: 2,
                    time: new Date().valueOf(),
                    amount: Number(orderInfo.order_amount),
                    amount_log: await this.model('member').where({ id: orderInfo.user_id }).getField('amount', true),
                    note: `${await get_nickname(orderInfo.user_id)} 通过[${payInfo.title}]支付方式进行充值,订单编号：${orderInfo.order_no}`,
                };
                await this.model('balance_log').add(log); // 添加到余额记录
            } else {
                updateData.status = 3; // 修改订单状态标记为第三步已付款
            }
            // 支付成功改变订单状态
            await this.model('order').where({ order_no: orderInfo.order_no }).update(updateData);
            // 记录支付日志
            await this.model('doc_receiving').where({ order_id: orderInfo.id }).update({ pay_status: 1, payment_time: payTime });
            return true;
        } else if (orderInfo.pay_status === 1) {
            return true;
        }
    }
}

module.exports = Order;
